package com.wanglianyun.config.datasource;

import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;

import javax.sql.DataSource;
import java.util.Map;

/**
 * Description: AbstractRoutingDataSource 是 Spring 框架中用于实现动态数据源路由的一个抽象类。
 * 它通过实现数据源的动态切换来支持多数据源的应用场景。
 * Copyright: Copyright (c) 2024
 * Create Time: 2024-11-13 16:25
 *
 * @author wanglianyun
 */
public class DynamicDataSource extends AbstractRoutingDataSource {

    public DynamicDataSource(DataSource defaultTargetDataSource, Map<Object, Object> targetDataSources) {
        // 设置默认的数据源。如果没有找到匹配的数据源标识，就会使用默认的数据源。
        super.setDefaultTargetDataSource(defaultTargetDataSource);
        super.setTargetDataSources(targetDataSources);
    }

    // 用于确定当前使用的数据源标识。根据返回的标识，AbstractRoutingDataSource 会从预先配置的数据源中选择对应的数据源。
    @Override
    public Object determineCurrentLookupKey() {
        return DynamicDataSourceContextHolder.getDataSource();
    }
}

